技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2026 iThome 鐵人賽
0
Build on Google AI
把Google AI當夥伴打造個人高效Coding工作流
系列 第
9
篇
第九天String不可變性與字串池
18th鐵人賽
chenuniii
2026-10-15 20:25:04
65 瀏覽
分享至
一、 字串池與儲存位置
字面量(String s = "abc"):
優先從String Pool複用既有物件;若無則在池中建立並返回,因此相同字面量的 == 結果為true。
new String("abc"):
無論池中有無相同字串,強制在一般Heap區開闢新物件,==比對結果必為false。
字串比較鐵律:
比對字串內容一律使用.equals(),絕不能用==。
架構演進:
JDK 7起將字串池從PermGen移至Java一般Heap區,避免因大量動態字串導致PermGen OOM,並讓字串能正常被GC回收。
二、 不可變性三大防線與價值
防線構建:
類別標記為final(防繼承篡改)。
底層陣列宣告為private final(外部不可見、門牌不可換)。
無公開修改方法(所有轉換操作如substring、replace皆返回全新String 物件)。
三大架構價值:
字串池共享安全:防止修改單一變數時污染其他共享該字串的變數。
天然線程安全:多執行緒間無鎖共享,完全消除併發衝突。
快取hashCode:字串內容不變,雜湊值計算一次後永久快取,大幅提升作為HashMap/HashSet Key時的查找效率。
三、 拼接效能災難:為什麼嚴禁迴圈使用+?
編譯器行為:
在執行期動態迴圈中,每次+=底層都會隱式建立一個新的StringBuilder並呼叫.toString()。
效能瓶頸:
迴圈執行 $N$ 次會瞬間在Heap產生 $2N$ 個短命物件,造成Eden區快速被塞滿,頻繁引發Minor/Full GC,導致CPU飆高與系統停頓。
四、 StringBuilder運作與擴容機制
容器選擇:單執行緒拼接一律使用StringBuilder;多執行緒併發安全才考慮 StringBuffer。
預設容量:無參數建構子預設容量為16個字元。
擴容公式:當空間不足時,新容量計算為舊容量×2+2。
效能建議:底層擴容依賴Arrays.copyOf()進行整塊連續記憶體複製與搬遷,大量拼接時務必預先指定容量,避免重複擴容拷貝的成本。
留言
追蹤
檢舉
上一篇
第八天常數與靜態的架構規範——記憶體生命週期與單例模式的三種安全寫法
下一篇
第十天例外架構體系Checked vs Unchecked、資源洩漏防禦與自訂業務例外封裝
系列文
把Google AI當夥伴打造個人高效Coding工作流
共
13
篇
目錄
RSS系列文
訂閱系列文
0
人訂閱
9
第九天String不可變性與字串池
10
第十天例外架構體系Checked vs Unchecked、資源洩漏防禦與自訂業務例外封裝
11
第十一天泛型機制、型別擦除與PECS原則
12
第十二天ArrayList 擴容演算法、拷貝開銷與LinkedList快取局部性劣勢
13
第十三天HashMap雜湊演算法、容量2的N次方原理與JDK 8紅黑樹轉換機制
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
929
組
團體組數
32
組
累計文章數
20206
篇
完賽人數
534
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
18th鐵人賽
17th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
鎖住個人檔案
2026年-請益支援中文codeing 的地端LLM
MAMP中mysql基礎設定更改後server not running
团队想从OpenAI API迁移到自部署Qwen或DeepSeek,除了API兼容性,在推理成本和运维复杂度上还有哪些隐性坑?
熱門回答
2026年-請益支援中文codeing 的地端LLM
团队想从OpenAI API迁移到自部署Qwen或DeepSeek,除了API兼容性,在推理成本和运维复杂度上还有哪些隐性坑?
熱門文章
Claude code 新手篇 9: Artifacts — 把產出變成一個會更新的網址
HTTP 200 不等於成功:我替 27 個台灣政府資料 skill 抓出的五種「假成功」
【Day 02】Vibe Coding 初體驗:環境搭建與 AI 酒館第一個酒吧 UI 畫面
當 AI 自己去申請美國簽證,誰要負責?
HTTP/3(QUIC)连接建立与 HTTPS 加密通信原理
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}